package ControleAcademico.Model.Dao;

import java.io.BufferedReader;  
import java.io.FileReader; 
import java.io.PrintWriter;
import java.util.ArrayList;
import ControleAcademico.Model.Pojo.Aluno;
import ControleAcademico.Model.Pojo.Faltas;
import ControleAcademico.Model.Pojo.HistoricoAtividade;
import ControleAcademico.Model.Pojo.HistoricoDisciplina;

public class AlunoImpl implements AlunoDao{

	private ArrayList<Aluno> listaDeAlunos;
	private HistoricoAtividadeImpl historicoAtividadeImpl;
	private HistoricoDisciplinaImpl historicoDisciplinaImpl;
	private FaltasImpl faltasImpl;
		
	public AlunoImpl (HistoricoAtividadeImpl historicoAtividadeImpl,HistoricoDisciplinaImpl historicoDisciplinaImpl,FaltasImpl faltasImpl) {
		listaDeAlunos = new ArrayList<Aluno>();
		this.historicoAtividadeImpl = historicoAtividadeImpl;
		this.historicoDisciplinaImpl = historicoDisciplinaImpl;
		this.faltasImpl = faltasImpl;
	}

	@Override
	public void salvar (Aluno aluno,HistoricoAtividadeImpl historicoAtividadeImpl, int flag)  {
		
		try{	
					
			if (flag != -1) { 						
				listaDeAlunos.add(aluno);	
			} else {
				
				PrintWriter p = new PrintWriter("Alunos.txt");
						
				for(Aluno alunos : listaDeAlunos){
					p.write(alunos.getId()+"");
					p.write("\t");
					p.write(alunos.getNome());
					p.write("\t");
					p.write(alunos.getCpf());
					p.write("\t");
					p.write ("Faltas\t");

					for(Faltas i : alunos.getFaltasTurma()){
						p.write(i.getId()+"\t");
					}

					p.write ("HistoricoAtividades\t");
					for(HistoricoAtividade i : historicoAtividadeImpl.pesquisarHistoricoAtividade(alunos)){
						p.write(i.getId()+"\t");
					}
					
					p.write ("HistoricoDisciplinas\t");
					for(HistoricoDisciplina i : alunos.getHistoricosDisciplinas()){
						p.write(i.getId()+"\t");
					}
					p.write("#");
					p.write("\n");
				}
				p.close();
			}
		} catch(Exception e){
			
		}
	}
	
	public ArrayList<Aluno> getListaDeAlunos(){
		return listaDeAlunos;
	}
	
	@Override
	public void carregar() {
	      String linha = null; 
	      
	      try {  
	    	 FileReader reader = new FileReader("Alunos.txt");    	
	    	   
	         BufferedReader leitor = new BufferedReader(reader);  
	         Aluno aluno;
	         HistoricoAtividade historicoAtividade=null;
	         HistoricoDisciplina historicoDisciplina;
	         Faltas faltas;
	  
	         while ((linha = leitor.readLine()) != null) {  
	            String[] dados = linha.split("\t"); 
	            aluno = new Aluno (dados[1], dados[2],Integer.parseInt(dados[0]));
	            int i = 4;
	           
	            while (!(dados[i].equals("HistoricoAtividades"))) { 
	            	faltas = faltasImpl.pesquisarArquivo(Integer.parseInt(dados[i]));
	            	aluno.adicionarFaltas(faltas);
	            	faltasImpl.adicionarFaltas(faltas);
	            	i++;
	            }
	            i++;
	      
	            while (!(dados[i].equals("HistoricoDisciplinas"))) { 
	               	historicoAtividade = historicoAtividadeImpl.pesquisarArquivo(Integer.parseInt(dados[i]));
	              	aluno.adicionarHistoricoAtividade(historicoAtividade);
	            	historicoAtividadeImpl.adicionarHistoricoAtividade(historicoAtividade);
	            	i++;
	            }
	            
	            i++;
	           
	            while (!(dados[i].equals("#"))) { 
	            	historicoDisciplina = historicoDisciplinaImpl.pesquisarArquivo(Integer.parseInt(dados[i]));	            	
	            	aluno.adicionarHistoricoDisciplina(historicoDisciplina);
	            	historicoDisciplinaImpl.adicionarHistoricoDisciplina(historicoDisciplina);
	            	i++;
	            }
	            System.out.println(i);
	            listaDeAlunos.add(aluno); 
	         }  
	         leitor.close();  
	         reader.close();  
	      } catch (Exception e) {
	    	  
	      }  
	  }

	public Aluno pesquisarNaListaImpl(int id){
		Aluno aluno = null;

		for (Aluno i : listaDeAlunos) {
			if (i.getId() == id){
				aluno = i;
				return aluno;		
			}
		}
		return aluno;
	}

	public Aluno pesquisarArquivo(int id){
		String linha;
		String identificador = id + "";
		Aluno aluno = null;
		
		try{
			FileReader reader = new FileReader("Alunos.txt");    	
			BufferedReader leitor = new BufferedReader(reader);
	        
	        while ((linha = leitor.readLine()) != null) {
	        	String[] dados = linha.split("\t");
	        	
	        	if(dados[0].equals(identificador)){
	        		aluno = new Aluno(dados[1],dados[2],id);
	        		return aluno;
	        	}
	        }
		}catch(Exception e){
			
		}
        return aluno;
	}	
}

